//package com.juyu.miliao.scheduler.service;
//
//import com.juyu.miliao.common.netease.NetEaseCloudUserService;
//import com.juyu.miliao.scheduler.cache.HostMessageCache;
//import com.juyu.miliao.scheduler.dao.mysql.UserInfoDao;
//import com.juyu.miliao.scheduler.domin.HostMessage;
//import com.juyu.miliao.scheduler.domin.User;
//import net.sf.json.JSONObject;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//
//@Component
//public class UserMessageVide {
//	@Resource
//	private StringRedisTemplate stringRedisTemplate;
//	@Resource
//	private UserInfoDao userInfoDao;
//
//	private final Logger logger = LoggerFactory.getLogger(UserMessageVide.class);
//
//	// 两分钟执行一次发送视频推送，延迟15秒执行
//	@Scheduled(fixedDelay = 1000 * 60, initialDelay = 1000 * 15)
//	public void userMessageVide() {
//		logger.info("定时任务userMessageVide开始：time={}",
//				LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//		// 获取数据
//		Map<Object, Object> map = stringRedisTemplate.opsForHash().entries("userMessageVideo");
//		map.forEach((key, value) -> {
//			logger.info("定时任务userMessageVide：key={}----value={}",key.toString(),value.toString());
//			JSONObject jasonObject = JSONObject.fromObject(value.toString());
//			Map jsonMap = (Map) jasonObject;
//			User user = userInfoDao.findUserById(Integer.parseInt(key.toString()));
//			//用户为空,缓存出错 清除缓存
//			if (user == null) {
//				stringRedisTemplate.opsForHash().delete("userMessageVideo", key.toString());
//				logger.info("定时任务userMessageVide：key={},用户为空,缓存出错 清除缓存", key);
//				return;
//			}
//
//			if(user.getIsVideo()!=2){
//				// 获取视频播放列表
//				List<HostMessage> voideList = HostMessageCache.INSTANCE.getHostMessageList(4);
//				// 获取10个随机主播(一个用户最多发6+3次视频)
//				List<Integer> userIds = new ArrayList<>();
//				List<User> userList = userInfoDao.getUserListRand(10, userIds);
//				for (int i = 0; i < userList.size(); i++) {
//					// 如果该主播没有向用户发送过视频请求 则使用该主播发送
//					if (!stringRedisTemplate.opsForSet().isMember("userMessageVideRepeat:" + key,
//							userList.get(i).getUserId() + "")) {
//						user = userList.get(i);
//						break;
//					}
//				}
//				HostMessage host = new HostMessage();
//				// 如果该用户是登录一分钟的用户 则发送的消息为3次，发送视频列表的0，1，2视频内容
////				String ss = jsonMap.get("type").toString();
////				if (Integer.parseInt(jsonMap.get("type").toString()) == 1) {
////					host = voideList.get(Integer.parseInt(jsonMap.get("num").toString()) - 1);
////				} else
////					// 如果该用户是登录十五分钟的用户 则发送的消息为6次，发送视频列表的3，4，5，6，7，8视频内容
////					host = voideList.get(9 - Integer.parseInt(jsonMap.get("num").toString()));
//				//2018-08-03 新需求 视频按随机发送
//				host = voideList.get((int) (Math.random() * voideList.size()));
//				try {
//					// 调用云信接口
//					JSONObject body = new JSONObject();
//					body.put("msg", host.getMessage());
//					logger.info("发送视频-云信：userId={},message={}", key, body.toString());
//					String temp = NetEaseCloudUserService.getSendMsg(Integer.parseInt(key + ""), user.getUserId(), 100,
//							body.toString());
//					if (!temp.substring(temp.indexOf("code") + 6, temp.indexOf("code") + 9).equals("200"))
//						logger.error("发送视频异常-云信：userId={},message={}", key, temp);
//				} catch (Exception e) {
//					logger.error("发送视频异常-系统：userId={},error={}", key, e);
//				}
//			}
//
//			// 发送完全部消息(1.删除主播id去重redis 2.删除队列中的用户)
//			if (Integer.parseInt(jsonMap.get("num").toString()) - 1 <= 0) {
//				stringRedisTemplate.delete("userMessageVideRepeat:" + key);
//				stringRedisTemplate.opsForHash().delete("userMessageVideo", key);
//			} else {// 没有发送完消息，等待下次发送(1.增加发送主播id去重redis 2.删除久的用户id 3.用户要发送的次数-1
//					// 4.重新入库)
//				stringRedisTemplate.opsForSet().add("userMessageVideRepeat:" + key, user.getUserId() + "");
//				stringRedisTemplate.opsForHash().delete("userMessageVideo", key);
//				JSONObject json = new JSONObject();
//				json.put("num", Integer.parseInt(jsonMap.get("num").toString()) - 1);
//				json.put("type", jsonMap.get("type"));
//				stringRedisTemplate.opsForHash().put("userMessageVideo", key, json.toString());
//			}
//		});
//		logger.info("定时任务userMessageVide结束：time={}",
//				LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//	}
//}
